﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;



namespace SistemaCenterQuimPost.UI
{
    public partial class frmEstadoCaja : SistemaCenterQuimPost.Plantillas.frmPlantillaHijo
    {
        
        //------------ATRIBUTOS---------------------
        private DataSet2 centerQuimDs;                              //atributos que me permiten acceder a la BD
        private DataSet2TableAdapters.CajasTableAdapter CajasTa;
        int i;   //variable que usaremos para controlar el numero de turnos
        
        

        //-----------CONSTRUCTORES--------------------
        public frmEstadoCaja(int ancho, int alto) //frmEstadoCaja usa Administrador, Supervisor. Ambos usan diferentes 
        {                                         //tamaños. El tamaño se recibe en el constructor.
            InitializeComponent();

            this.centerQuimDs = new DataSet2();                  //inicializacion de atributos que me permiten acceder a la BD
            this.CajasTa = new DataSet2TableAdapters.CajasTableAdapter();
            

            this.Width = ancho;
            this.Height = alto;
            this.MinimumSize = new System.Drawing.Size(ancho, alto); //Se establece el tamaño máximo y mínimo en pixeles.
            this.MaximumSize = new System.Drawing.Size(ancho, alto);
        }

        
        //----------ESTADOS---------------------

        private void frmEstadoCaja_Load(object sender, EventArgs e)
        {
            this.estEsperandoDatos();
        }

        private void estEsperandoDatos()
        {
            System.Windows.Forms.Control[] controlesHabilitados = { };
            System.Windows.Forms.Control[] controlesDeshabilitados = { };
            System.Windows.Forms.Control[] controlesVisibles = {};
            System.Windows.Forms.Control[] controlesInvisibles = {this.lblError };

            habilitarControles(controlesHabilitados);
            deshabilitarControles(controlesDeshabilitados);
            visibleControles(controlesVisibles);
            invisibleControles(controlesInvisibles);

            cboTurno.SelectedIndex = 0; //por defecto toma el valor "M" de entrada

            this.dtpFecha.Focus();  //se deja el foco en la fecha.


        }

       

        //------------METODOS VARIOS---------------------
          
        private void btnBusCaja_Click(object sender, EventArgs e)
        {
            limpiarGrilla(); //limpiamos el datagride
            try
            {
              if (cboTurno .Text != "") //si esta indicado el turno
              {
                  CajasTa.FillByFechayTurno(centerQuimDs.Cajas, Convert.ToDateTime(dtpFecha.Value.ToString("d")), this.cboTurno.SelectedItem.ToString()); //obtiene todos los datos de la caja en la fecha y turno   
                  cargarTurno(0);//cargamos el turno
                  mostrarLabel(0);
              }
              else //si el cboturno está en blanco
              {
                  CajasTa .FillByFecha (centerQuimDs .Cajas ,Convert .ToDateTime (dtpFecha .Value .ToString ("d")));

                  for (i = 0; i < centerQuimDs.Cajas.Rows.Count; i++)
                  {
                      cargarTurno(i); //cargamos turnos
                      mostrarLabel(i);
                  }
              }
               
              // this.estMostrandoDatos();  //se establece la interface para mostrar el estado de la caja.
            }

            catch (IndexOutOfRangeException)  //excepcion cuando no encuentra registro en la base de datos caja.
            {
                MessageBox.Show("No se ha encontrado registro de caja para la fecha y el turno especificado.", "INFORMES", MessageBoxButtons.OK, MessageBoxIcon.Information);
                
                estEsperandoDatos();  //se deja el formulario como al principio.
                limpiarGrilla();
            }

            catch (Exception ex)
            {
                //Por cualquier otra excepcion se informa el error, en este caso es un error grave.
                MessageBox.Show("La conexión a la base de datos no fué exitosa.\n\n Comuniquese con su desarrollador para solucionar el problema.\n\n" + ex.Message, "ERROR GRAVE - ACCESO A BASE DE DATO", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
        }

       

        private string getNombreUsuarioCajaAbierta(int codUsuarioApertura) //método que obtiene el usuario de una caja abierta.
        {
            DataSet2 UsuariosDs = new DataSet2();
            DataSet2TableAdapters.UsuariosTableAdapter UsuariosDa = new DataSet2TableAdapters.UsuariosTableAdapter();

            try
            {
                UsuariosDa.FillByCodigoUsuario(UsuariosDs.Usuarios, codUsuarioApertura);

                return UsuariosDs.Usuarios[0].nombreUsuario;

            }

            catch (IndexOutOfRangeException)
            {
                return "Usuario ya eliminado.";

            }

            catch (Exception)
            {
                return "";

            }

        }

        private void mostrarLabel (int c)
        {
            if (c==0)
            {
                lbl1.Visible = true;
                lbl1.Text = "OBSERVACIONES: " + centerQuimDs.Cajas[c].observacion; 
            }

            if (c==1)
            {
                lbl2.Visible = true;
                lbl2.Text = "OBSERVACIONES: " + centerQuimDs.Cajas[c].observacion; 
            }

            if (c==2)
            {
                lbl3.Visible = true;
                lbl3.Text = "OBSERVACIONES: " + centerQuimDs.Cajas[c].observacion;
            }
        }

        private void limpiarGrilla() //metodo que limpia la grilla
        {
            dgvCaja.Rows.Clear();
            lbl1.Visible = false;
            lbl2.Visible = false;
            lbl3.Visible = false;
            
        }

        private string establecerTurno( string a)//establece una cadena para el turno segun el digito recibido
        {
            if (a =="M")
            {
                return "MAÑANA";
            }
            if (a == "T")
            {
                return "TARDE";
            }
            else
            {
                return "NOCHE";
            }
        }

        private string establecerEstado (string b) //establece el estado segun el primer digito recibido
        {
            if (b=="A")
            {
                return "ABIERTA";
            }
            else
            {
                return "CERRADA";
            }
        }

        private void cargarTurno(int a)
        {
            //variables usadas para acumular los conceptos
            double totalDebe = 0;
            double totalHaber = 0;

            //establecemos un tipo de estilo de fila
            DataGridViewCellStyle style1 = new DataGridViewCellStyle();
            style1.Font = new Font(dgvCaja.Font, FontStyle.Bold);
            style1.BackColor = Color.LightBlue;

            //establecemos otro tipo de estilo de fila
            DataGridViewCellStyle style2 = new DataGridViewCellStyle();
            style2 .Font = new System.Drawing.Font(dgvCaja .Font ,FontStyle.Bold );
            style2.Alignment = DataGridViewContentAlignment.MiddleCenter;

            //establecemos otro tipo de estilo de fila
            DataGridViewCellStyle style3 = new DataGridViewCellStyle();
            style3.Font = new System.Drawing.Font(dgvCaja.Font, FontStyle.Bold);
            style3.Alignment = DataGridViewContentAlignment.MiddleCenter;
            style3.BackColor = Color.LightGray;

            dgvCaja.Rows.Add("TURNO: " + establecerTurno ( centerQuimDs.Cajas[a].turno.ToString()), "", "CAJERO: " + getNombreUsuarioCajaAbierta(centerQuimDs.Cajas[a].codUsuarioCierre).ToString());
            dgvCaja.Rows[dgvCaja .Rows .Count -1].DefaultCellStyle = style1;
            dgvCaja.Rows.Add("ESTADO: " + establecerEstado(centerQuimDs.Cajas[a].estado.ToString()), "", "");
            dgvCaja.Rows[dgvCaja.Rows.Count - 1].DefaultCellStyle = style1;
            dgvCaja.Rows[dgvCaja.Rows.Count - 1].DefaultCellStyle.BackColor = Color.LightBlue;
            dgvCaja.Rows.Add("", "DEBE", "HABER");
            dgvCaja.Rows[dgvCaja.Rows.Count - 1].DefaultCellStyle = style2;
            dgvCaja.Rows.Add("Caja Inicial","$" + centerQuimDs.Cajas[a].cajaInicial.ToString(), "$0");
            dgvCaja.Rows.Add("Ventas", "$" + centerQuimDs.Cajas[a].ventas.ToString(), "$0");
            dgvCaja.Rows.Add("Cobros", "$" + centerQuimDs.Cajas[a].pagos.ToString(), "$0");
            dgvCaja.Rows.Add("Ingresos", "$" + centerQuimDs.Cajas[a].ingresos.ToString(), "$0");
            dgvCaja.Rows.Add("Gastos", "$0", "$"+centerQuimDs.Cajas[a].gastos.ToString());
            dgvCaja.Rows.Add("Deudores por Ventas", "$0", "$" + centerQuimDs.Cajas[a].deudoresxVenta.ToString());
            dgvCaja.Rows.Add("Caja", "$0", "$"+centerQuimDs.Cajas[a].cajaFinal.ToString());
            dgvCaja.Rows.Add("Extracciones", "$0", "$"+centerQuimDs.Cajas[a].extracciones.ToString());
            
            //obtenemos totales
            totalDebe = centerQuimDs.Cajas[a].cajaInicial + centerQuimDs.Cajas[a].ventas + centerQuimDs.Cajas[a].ingresos + centerQuimDs .Cajas [a].pagos ;
            totalHaber += centerQuimDs.Cajas[a].gastos + centerQuimDs.Cajas[a].cajaFinal + centerQuimDs.Cajas[a].extracciones + centerQuimDs.Cajas[a].deudoresxVenta;
            
            dgvCaja.Rows.Add("Saldo", "$"+totalHaber.ToString(), "$"+totalHaber.ToString());
            dgvCaja.Rows[dgvCaja.Rows.Count - 1].DefaultCellStyle = style3;
            dgvCaja.Rows.Add();
           
            
        }
        }

    
}

 